package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class JDBCDemo1 {
    public static void main(String[] args) throws Exception {
         /*  jar包
            1:加载驱动(加载不同数据库提供商提供的JDBC实现类)
            2:通过驱动管理器建立链接，创建Connection对象
            3:通过链接对象创建语句执行对象Statement
            4:通过语句对象执行SQL语句
            5:如果执行的是DQL(SELECT语句)，则会得到查询结果集
            6:遍历结果集获取数据库查询结果
            7:与数据库断开链接
         */
        /*
            JDBC中定义了一个接口:Driver
            所有数据库提供商在提供JDBC驱动时都要实现这个接口，提供实现类
            不同数据库实现类的包名和类名不完全一样，下面是MySQL提供的实现类。
            利用反射机制加载数据库驱动包中的驱动实现类(Driver实现类)
         */
        // 加载MySQL JDBC驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
         /*
            DriverManager 驱动管理器，是JDBC提供的类
            用于根据上面加载的Driver实现类与该数据建立链接

            JDBC规定中，URL地址(数据库地址)格式:jdbc:host?参数
            host部分因为没有进行严格限制，因此不同数据库也不完全一样

            例如:mysql或mariadb
            jdbc:mysql://localhost:3306/tedu?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true",
                                        ^^^^
                                      要链接的数据库名
                                      相当与:USE tedu
         */
        // 获取数据库连接
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/tedu?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true",
                "root","root");
        /*
            Statement提供的执行SQL的方法
            boolean execute(String sql)
            因为上面的方法可以执行任何种类的SQL语句，自然涵盖DQL语句，DQL是查询语句，执行后会产生
            查询结果集，因此当执行后产生了查询结果集则返回true

            因为执行DML语句和DQL语句都有专门的方法，因此我们很少会用execute方法进行操作。
            execute通常比较常用的是执行DDL语句
         */
        System.out.println("与数据库成功连接");
        Statement statement = connection.createStatement();
        String sql="CREATE TABLE userinfo(\n" +
                "    id INT PRIMARY KEY AUTO_INCREMENT,\n" +
                "    username VARCHAR(30),\n" +
                "    password VARCHAR(30),\n" +
                "    nickname VARCHAR(30),\n" +
                "    age INT(3)          \n" +
                ")";
        statement.execute(sql);
        connection.close();
    }
}
